package com.changwen.currentactivity.accessibility;

import android.view.accessibility.AccessibilityNodeInfo;

import java.util.List;

/**
 * @author lcw
 * @date 2019/4/5
 * @desc
 */
public interface IAcbAction {
    /**
     * 模拟后退事件
     */
    void performBack();

    /**
     * 模拟home
     */
    void performHome();

    /**
     * 模拟最近任务
     */
    void performEcents();

    /**
     * 模拟拉出通知栏
     */
    void performNotifications();

    /**
     * 模拟向上滚动
     */
    void performScrollUp();

    /**
     * 模拟向下滚动
     */
    void performScrollDown();

    /**
     * 模拟view点击
     *
     * @param nodeInfo
     */
    boolean performViewClick(AccessibilityNodeInfo nodeInfo);

    /**
     * 根据文本获取view控件
     *
     * @param text
     * @return
     */
    AccessibilityNodeInfo findViewByText(String text);

    /**
     * 根据文本获取view控件
     *
     * @param text
     * @param clickable
     * @return
     */
    AccessibilityNodeInfo findViewByText(String text, boolean clickable);

    /**
     * 根据文本获取view控件
     *
     * @param viewId
     * @return
     */
    AccessibilityNodeInfo findViewByViewId(String viewId);

    /**
     * 根据文本获取view控件
     *
     * @param viewId
     * @param clickable
     * @return
     */
    AccessibilityNodeInfo findViewByViewId(String viewId, boolean clickable);

    /**
     * 点击指定text的view
     *
     * @param text
     */
    boolean clickViewByText(String text);

    /**
     * 点击指定text的view(WebView内部)
     *
     * @param text
     */
    boolean clickViewByTextInWebView(String text);

    /**
     * 点击指定text的view(WebView内部)
     *
     * @param text
     */
    boolean clickViewByTextInWebViewToList(String text);

    /**
     * 点击指定viewId的view
     *
     * @param viewId
     */
    boolean clickViewByViewId(String viewId);

    /**
     * 模拟文本框输入
     *
     * @param nodeInfo
     * @param text
     */
    void performInputText(AccessibilityNodeInfo nodeInfo, String text);

    /**
     * 递归寻找AccessibilityNodeInfo  这里主要用于寻找webView 内部的文本
     * 适用于 文本唯一的控件
     *
     * @param target
     * @return
     */
    AccessibilityNodeInfo recurseFindByText(String target);

    /**
     * 递归寻找AccessibilityNodeInfo  这里主要用于寻找webView 内部的文本
     * 适用于 文本唯一的控件
     *
     * @param nodeInfo
     * @param target
     * @return
     */
    AccessibilityNodeInfo recurseFindByText(AccessibilityNodeInfo nodeInfo, String target);

    /**
     * 递归寻找AccessibilityNodeInfo  这里主要用于寻找webView 内部的文本
     * 找到控件添加进List
     * 这里属于模糊匹配， 只要包含target即可
     *
     * @param target
     * @return
     */
    List<AccessibilityNodeInfo> recurseFindByTextToList(String target);

    /**
     * 递归寻找AccessibilityNodeInfo  这里主要用于寻找webView 内部的文本
     * 找到控件添加进List
     * 这里属于模糊匹配， 只要包含target即可
     *
     * @param target
     * @param nodeInfo
     * @return
     */
    List<AccessibilityNodeInfo> recurseFindByTextToList(AccessibilityNodeInfo nodeInfo, String target);

    /**
     * 根据widget获取view控件 (android.widget.EditText)
     *
     * @param widgetFullName
     * @return
     */
    List<AccessibilityNodeInfo> findViewByWidget(String widgetFullName);

    /**
     * 根据widget获取view控件 (android.widget.EditText)
     *
     * @param nodeInfo
     * @param widgetFullName
     * @return
     */
    List<AccessibilityNodeInfo> findViewByWidget(AccessibilityNodeInfo nodeInfo, String widgetFullName);

    /**
     * 根据ContentDescription获取view控件
     *
     * @param contentDesc
     * @return
     */
    List<AccessibilityNodeInfo> findViewByContentDesc(String contentDesc);

    /**
     * 根据ContentDescription获取view控件
     *
     * @param nodeInfo
     * @param contentDesc
     * @return
     */
    List<AccessibilityNodeInfo> findViewByContentDesc(AccessibilityNodeInfo nodeInfo, String contentDesc);

}
